Map 인터페이스
✒️ 2025-05-27 16:50 내용 수정
Map 인터페이스
key와 value의 한 쌍으로 이루어져 있고, 순서가 없는 key-value 저장 방식을 사용
- 키는 중복을 허용하지 않지만 값은 중복될 수 있다.
- key가 중복되는 경우, 중복을 허용하지 않지만 key에 해당하는 value값이 업데이트 되어 저장되어 버린다.
- 같은 값을 저장하고 싶다면 키 값을 다르게 해서 저장하면 된다.
- List, Set과 다르게 Map 인터페이스가 별도로 존재한다.
- Colletion 인터페이스를 계승하지 않는다.
- Map 인터페이스 안에서 정의된 Entry 인터페이스(즉 내부 클래스(Inner classes) 형태)를 상속한 객체에 Map의 key와 value가 저장된다.
- key와 value에는 모든 데이터 타입, 객체도 가능하다.

왜 key가 고유해야 하는가
- 식별성 문제 (고유성 문제)
- key를 기반으로 탐색을 진행하는데, 중복된 key가 존재하면 어떤 것을 식별해야할 지 문제가 생긴다.
- 검색 성능상의 문제 (빠른 검색 철학 문제)
- key-value(단일값)이 mapping되어 있음을 전제로 검색하는데, key가 단일값이 아닐 경우 검색을 추가적으로 진행해야 한다.
- 시간 복잡성이 O(1) 또는 O(log n)이 아닌 O(n)으로 증가함
- API 단순화 및 예측 가능성
- 하나의 key엔 하나의 value가 저장되어 있어 사용자가 이를 전제로 코드를 작성할 수 있다.
인터페이스 메서드
| Map 인터페이스 메서드 | 설명 |
|---|---|
void put(K key, V value) |
key에 대응하는 value를 저장 |
V get(K key) |
key에 대응하는 value를 반환 |
boolean containsKey(K key) |
key의 존재 여부 검색 |
boolean containsValue(V value) |
value의 존재 여부 검색 |
V remove(K key) |
key에 대응하는 매핑 제거 |
boolean remove(K key, V value) |
key에 대응하는 value를 제거 |
Set<E> keySet() |
모든 key를 Set 컬렉션에 저장하여 반환 (Set은 중복되는 데이터를 못 담으니까 중복 제거) |
Set<Map.Entry<K, V>> entrySet() |
모든 Map.Entry 객체를 Set에 담아 반환 (Set은 해시코드와 값을 비교하므로 단일 key에 대응되는 value를 저장 가능) |
int size() |
맵의 매핑 총 개수를 반환 |
boolean isEmpty() |
해당 맵이 비었는지 확인 |
V replace(K key, V value) |
해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체 |
getOrDefault(K key, V value) |
해당 맵에서 전달된 키에 대응되는 값을 찾고, 키가 존재한다면 키의 값을 반환 만약 키가 맵에 존재하지 않는다면 defaulValue로 지정한 값을 반환 |
- entrySet는 이미 선언된 map에서 만든다
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Map 인터페이스 구현체
Map 인터페이스 구현체 비교
- Map 컬렉션 클래스로는
HashMap<E>,TreeMap<E>,LinkedHashMap<E>등이 있다. HashMap<E>을 가장 많이 사용한다.HashMap<E>은HashMap<E>처럼 해시 알고리즘을 사용하기 때문에 List와 Set에 비해 삽입과 삭제는 느리지만 검색이 매우 빠르다.
| HashMap | TreeMap | |
|---|---|---|
| 저장형태 | key-value | key-value |
| 내부 구조 | Hash Table | Red-Black Tree |
| 정렬/순서 | X | key로 정렬 |
| 연산 성능 | O(1) | O(log n) |
| null 허용 | key : 1개 허용 value : 여러 개 허용 |
key : X |
1. HashMap
- 첫 번째 데이터 타입은 key의 데이터 타입이고, 두 번째 데이터 타입은 value의 데이터 타입이다.
Map<데이터타입, 데이터타입> 인스턴스이름 = new HashMap<>();
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 1);